/* @flow */

import { toArray } from '../util/index'

export function initUse (Vue: GlobalAPI) {
  Vue.use = function (plugin: Function | Object) {
    const installedPlugins = (this._installedPlugins || (this._installedPlugins = []))//这里的this指向Vue,而不是Vue的实例
    // 如果插件已经安装，直接返this
    if (installedPlugins.indexOf(plugin) > -1) {
      return this
    }

    // additional parameters
    // 把arguments的第一个参数去掉 ,剩下的就是安装插件需要传递的参数,例如 Vue.use(plugin,a,b,c...) a,b,c...就是args
    const args = toArray(arguments, 1)
    // 将Vue插入到参数的第一个参数plugin去除
    args.unshift(this)
    if (typeof plugin.install === 'function') {
      plugin.install.apply(plugin, args)
    } else if (typeof plugin === 'function') {
      plugin.apply(null, args)
    }
    // 保存已安装的插件
    installedPlugins.push(plugin)
    return this
  }
}
// Vue.use(MyPlugin,a,b,c...)
// MyPlugin.install = function (Vue, options) {
//   ...
// }